package transporte.server.entity;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.commons.lang.StringUtils;

@Entity
@Table(name="trans_personas")
@Inheritance(strategy = InheritanceType.JOINED)
public class Persona {
	
	private long idPersona;
	private long nmidentificacion;
	private TipoIdentificacion tipoIdentificacion;
	private String email;
	private String telefono;
	private String direccion;
	private String segundoApellido;
	private String primerApellido;
	private String segundoNombre;
	private String primerNombre;
	
	
	@Id @GeneratedValue
	public long getIdPersona() {
    	return idPersona;
    }
	public void setIdPersona(long idPersona) {
    	this.idPersona = idPersona;
    }
	/**
	 * @return the nmidentificacion
	 */
	public long getNmidentificacion() {
		return nmidentificacion;
	}
	/**
	 * @param nmidentificacion the nmidentificacion to set
	 */
	public void setNmidentificacion(long nmidentificacion) {
		this.nmidentificacion = nmidentificacion;
	}
	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}
	/**
	 * @param email the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}
	/**
	 * @return the telefono
	 */
	public String getTelefono() {
		return telefono;
	}
	/**
	 * @param telefono the telefono to set
	 */
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	/**
	 * @return the direccion
	 */
	public String getDireccion() {
		return direccion;
	}
	/**
	 * @param direccion the direccion to set
	 */
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}
	/**
	 * @return the segundoApellido
	 */
	public String getSegundoApellido() {
		return segundoApellido;
	}
	/**
	 * @param segundoApellido the segundoApellido to set
	 */
	public void setSegundoApellido(String segundoApellido) {
		this.segundoApellido = segundoApellido;
	}
	/**
	 * @return the primerApellido
	 */
	public String getPrimerApellido() {
		return primerApellido;
	}
	/**
	 * @param primerApellido the primerApellido to set
	 */
	public void setPrimerApellido(String primerApellido) {
		this.primerApellido = primerApellido;
	}
	/**
	 * @return the segundoNombre
	 */
	public String getSegundoNombre() {
		return segundoNombre;
	}
	/**
	 * @param segundoNombre the segundoNombre to set
	 */
	public void setSegundoNombre(String segundoNombre) {
		this.segundoNombre = segundoNombre;
	}
	/**
	 * @return the primerNombre
	 */
	public String getPrimerNombre() {
		return primerNombre;
	}
	/**
	 * @param primerNombre the primerNombre to set
	 */
	public void setPrimerNombre(String primerNombre) {
		this.primerNombre = primerNombre;
	}
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="idtipo_identificacion")
	public TipoIdentificacion getTipoIdentificacion() {
    	return tipoIdentificacion;
    }
	
	public void setTipoIdentificacion(TipoIdentificacion tipoIdentificacion) {
    	this.tipoIdentificacion = tipoIdentificacion;
    }
		
	@Transient
	public String getNombreCompleto() {
		StringBuilder sb = new StringBuilder();
		sb.append(this.getPrimerNombre()).append(" ");
		if (StringUtils.isNotBlank(this.getSegundoNombre())) {
			sb.append(this.getSegundoNombre()).append(" ");
		}
		sb.append(this.getPrimerApellido());
		if (StringUtils.isNotBlank(this.getSegundoApellido())) {
			sb.append(" ").append(this.getSegundoApellido());
		}
		return sb.toString();
	}
	
	@Transient
	public String getNombres() {
		StringBuilder sb = new StringBuilder();
		sb.append(this.getPrimerNombre()).append(" ");
		if (StringUtils.isNotBlank(this.getSegundoNombre())) {
			sb.append(this.getSegundoNombre()).append(" ");
		}
		
		return sb.toString();
	}
	
	@Transient
	public String getApellidos() {
		StringBuilder sb = new StringBuilder();
		sb.append(this.getPrimerApellido());
		if (StringUtils.isNotBlank(this.getSegundoApellido())) {
			sb.append(" ").append(this.getSegundoApellido());
		}
		return sb.toString();
	}
		
}
